package cn.fourhundredandeighteen.view.TeacherView.SetStudentCourseScore;

import cn.fourhundredandeighteen.controller.StudentController;
import cn.fourhundredandeighteen.entity.Score;
import cn.fourhundredandeighteen.utill.Result;
import cn.fourhundredandeighteen.view.Component.Button;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;

/**
 * 自定义一个往列里边添加按钮的单元格编辑器。最好继承DefaultCellEditor，不然要实现的方法就太多了。
 */
public class MyButtonEditor extends DefaultCellEditor {

    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = -6546334664166791132L;

    private JPanel panel;

    private JButton button = new Button();
    private JButton button1 = new Button();
    private JTable studentSession;
    private Long text;

    public MyButtonEditor(JTable studentSession) {
        super(new JTextField());
        this.studentSession = studentSession;
        this.setClickCountToStart(1);
    }

    public MyButtonEditor(JTable studentSession, Long text) {

        // DefautlCellEditor有此构造器，需要传入一个，但这个不会使用到，直接new一个即可。
        super(new JTextField());
        // 设置点击几次激活编辑。
        this.studentSession = studentSession;
        this.text = text;
        this.panel.removeAll();
        this.setClickCountToStart(1);

        this.initButton();
        this.initButton2(text);
        this.studentSession = studentSession;
        this.initPanel();


        // 添加按钮。
        // this.panel.add(this.button);

        this.panel.add(this.button1);

    }

    private void initButton() {

        this.button.setText("\u8bbe\u7f6e\u6210\u7ee9");
        // 设置按钮的大小及位置。
        this.button.setBounds(8, 3, 100, 25);

        // 为按钮添加事件。这里只能添加ActionListner事件，Mouse事件无效。


    }

    private void initButton2(Long text) {

        this.button1.setText("\u8bbe\u7f6e\u6210\u7ee9");
        // 设置按钮的大小及位置。
        this.button1.setBounds(8, 3, 100, 25);

        // 为按钮添加事件。这里只能添加ActionListner事件，Mouse事件无效。
        this.button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // 触发取消编辑的事件，不会调用tableModel的setValue方法。
                MyButtonEditor.this.fireEditingCanceled();

                // 这里可以做其它操作。
                // 可以将table传入，通过getSelectedRow,getSelectColumn方法获取到当前选择的行和列及其它操作等。
                String dialog = JOptionPane.showInputDialog(null, "请输入成绩");

                Score score = new Score();
                score.setScore(BigDecimal.valueOf(Long.valueOf(dialog)));
                score.setStudentId(Long.valueOf(studentSession.getValueAt(studentSession.getSelectedRow(), 0).toString()));
                score.setCourseId(text);
                StudentController studentController = new StudentController();
                Result result = studentController.setCourseScore(score);

            }
        });
    }

    private void initPanel() {
        this.panel = new JPanel();

        // panel使用绝对定位，这样button就不会充满整个单元格。
        this.panel.setLayout(null);
    }


    /**
     * 这里重写父类的编辑方法，返回一个JPanel对象即可（也可以直接返回一个Button对象，但是那样会填充满整个单元格）
     */
    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        // 只为按钮赋值即可。也可以作其它操作。
        this.button.setText(value == null ? "" : String.valueOf(value));

        return this.panel;
    }

    /**
     * 重写编辑单元格时获取的值。如果不重写，这里可能会为按钮设置错误的值。
     */
    @Override
    public Object getCellEditorValue() {
        return this.button.getText();
    }


}